<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>找到小镇的法官</title>
</head>

<body>
  <script>
    const findJudge = (N, trust) => {
      // 1. 哈希表：记录村民（信任别人的人）
      const villagerMap = new Set();
      // 2. 哈希表：记录法官（被信任的人）
      const judgeMap = new Map();
      // 3. 遍历信任清单，进行哈希记忆
      for (let i = 0; i < trust.length; i++) {
        // 3.1 当前被信任的人
        const trusted = trust[i][1];
        // 3.2 当前被信任的次数
        const time = judgeMap.get(trusted);
        // 3.3 哈希表：记录每个村民
        villagerMap.add(trust[i][0]);
        // 3.4 哈希表：统计法官次数
        if (time) {
          judgeMap.set(trusted, time + 1);
        } else {
          judgeMap.set(trusted, 1);
        }
      }
      // 4. 开始汇报结果
      for (let [key, value] of judgeMap) {
        // 4.1 如果被信任次数为 N - 1
        // 4.2 如果它不在村民清单中
        if (value === N - 1 && !villagerMap.has(key)) {
          return key;
        }
      }
      // 5. 如果找不到，返回 -1
      // 6. 如果存在 findJudge(1, []) 情况
      return !trust.length ? N : -1;
    };
    console.log(findJudge(3, [[1, 3], [2, 3]]))
  </script>
</body>

</html>